package com.xiaoyg.algorithm;

/***
 * 删除数组元素
 * 一个有序数组nums,原地删除重复出现的元素，使每个元素只出现一次，返回删除后数组的新长度。不能使用额外的数组空间，必须在原地修改输入数组并使用O（1）额外空间的条件下完成。
 *
 * 例：输入：【0，1，2，2，3，3，4】；输出：5
 *
 * 重点考察：双指针法
 */
public class SortedArrayDuplicates {

    public static void main(String[] args) {
        System.out.println(removeDuplicates(new int [] {0,1,2,2,3,3,4}));
    }

    /**
     * 双指针
     * @param nums
     * @return
     *
     * 0，1，2，2，3，3，4
     * ^  ^
     * i  j
     * 0，1，2，2，3，3，4
     *    ^  ^
     *    i  j
     * 0，1，2，2，3，3，4
     *      ^  ^
     *      i  j
     * 0，1，2，3，3，3，4
     *         ^ ^
     *         i j
     * 0，1，2，3，4，3，4
     *           ^     ^
     *           i     j
     *
     * =========> retuen i + 1；
     */
    public static int removeDuplicates(int [] nums){
        //快慢双指针
        if (nums == null || nums.length == 0){
            return 0;
        }
        int i = 0;
        for (int j = 1; j<=nums.length;j++){
            if (nums[j] != nums[i]){
                //值相等时，i后移
                i ++ ;
                //将j值赋给后移之后的i
                nums[i] = nums[j];
            }
            //值相等时，i不动，j++
        }
        return i + 1;
    }

}
